Physical computing environments include physical computing resources such as servers, storage devices, etc. Physical computing resources may be expensive to maintain and/or may require specialized knowledge to operate and/or service. Virtual computing environments (sometimes referred to as “virtual data centers”) virtualize such physical resources or physical components making it possible for someone who does not actually own the physical computing resources (e.g., servers, storage components and networks) to utilize the physical computing resources through commercial transactions. Virtualizing aggregates and presents various physical resources as virtual resources in a virtual computing environment. Additionally or alternatively, virtualization allows for the segregation of workloads executing on the same hardware or same pool of hardware resources. A workload, as used herein, is an abstraction of work that an application instance or a set of applications instances are to perform. For example, a workload may be implementing a web server, a payment processing server, implementing a web server farm, implementing a multilayer application, etc. Thus, virtualization allows for a web server and a payment processing server executing on the same underlying hardware to be segregated, have access to separate virtual hardware, etc.
Many different types of virtualization environments exist. Three example types of virtualization environment are: full virtualization, paravirtualization, and operating system virtualization.
Full virtualization, as used herein, is a virtualization environment in which hardware resources are managed by a hypervisor to provide virtual hardware resources to a virtual machine. In a full virtualization environment, the virtual machines do not have access to the underlying hardware resources. In a typical full virtualization, a host operating system with embedded hypervisor (e.g., VMware ESXi®) is installed on the server hardware. Virtual machines including virtual hardware resources are then deployed on the hypervisor. A guest operating system is installed in the virtual machine. The hypervisor manages the association between the hardware resources of the server hardware and the virtual resources allocated to the virtual machines (e.g., associating physical random access memory (RAM) with virtual RAM). Typically, in full virtualization, the virtual machine and the guest operating system have no visibility and/or access to the hardware resources of the underlying server. Additionally, in full virtualization, a full guest operating system is typically installed in the virtual machine while a host operating system is installed on the server hardware. Example virtualization environments include VMware ESX®, Microsoft Hyper-V®, and Kernel Based Virtual Machine (KVM).
Paravirtualization, as used herein, is a virtualization environment in which hardware resources are managed by a hypervisor to provide virtual hardware resources to a virtual machine and guest operating systems are also allowed to access to some or all of the underlying hardware resources of the server (e.g., without accessing an intermediate virtual hardware resource). In a typical paravirtualization system, a host operating system (e.g., a Linux-based operating system) is installed on the server hardware. A hypervisor (e.g., the Xen® hypervisor) executes on the host operating system. Virtual machines including virtual hardware resources are then deployed on the hypervisor. The hypervisor manages the association between the hardware resources of the server hardware and the virtual resources allocated to the virtual machines (e.g., associating physical random access memory (RAM) with virtual RAM). In paravirtualization, the guest operating system installed in the virtual machine is configured also to have direct access to some or all of the hardware resources of the server. For example, the guest operating system may be precompiled with special drivers that allow the guest operating system to access the hardware resources without passing through a virtual hardware layer. For example, a guest operating system may be precompiled with drivers that allow the guest operating system to access a sound card installed in the server hardware. Directly accessing the hardware (e.g., without accessing the virtual hardware resources of the virtual machine) may be more efficient, may allow for performance of operations that are not supported by the virtual machine and/or the hypervisor, etc.
Container virtualization, also referred to herein as operating system virtualization, refers to a system in which processes are isolated in virtual containers in an operating system. In a typical container virtualization system, a host operating system is installed on the server hardware. Alternatively, the host operating system may be installed in a virtual machine of a full virtualization environment or a paravirtualization environment. The host operating system of an operating system virtualization system is configured (e.g., utilizing a customized kernel) to provide isolation and resource management for processes that execute within the host operating system (e.g., applications that execute on the host operating system). The isolation of the processes is known as a container (also referred to as a virtual container). Thus, a process executes within a container that isolates the process from other processes executing on the host operating system. Thus, container virtualization provides isolation and resource management capabilities without the resource overhead utilized by a full virtualization environment or a paravirtualization environment. Example operating system virtualization environments include Linux Containers LXC and LXD, Docker™, OpenVZ™, etc.
In some instances, it is desirable to monitor the operation of applications and/or other operations executing in a virtual environment (e.g., executing in a virtual machine, executing in a container, etc.). Typically, a monitoring agent is installed in each of the virtual environments to be monitored. FIG. 1 is a block diagram of a typical example system 100 in which containers in a virtual container environment are monitored.
The example system 100 includes a host computing device 102, a network 104, and a central server 106. In the example, system, monitoring data collected at the example host 102 is transmitted via the example network 104 to the example central server 106. While the example system 100 includes a single host 102, a single network 104, and a single central server 106, any number of the hosts 102, the networks 104, and the central servers 106 may be included. For example, a plurality of the hosts 102 may collect data that is transmitted to a central server 106 for analysis and reporting of the aggregated data.
According to the example FIG. 1, an example operating system 110 executes on the example host 102. The example operating system includes an example container engine 112. For example, the operating system 110 and the container engine 112 may be implemented by a Linux containers infrastructure.
The illustrated example includes three example containers 114, which each include an example application 116 executing within the container 114. Additionally, a monitoring agent 118 is installed in each of the example containers 114. The example monitoring agents 118 collect monitoring information about the execution of the example application 116 in the example containers 114. For example, the monitoring agents 118 may collect information about resource utilization of a process associated with the example application 116 in the containers 114 (e.g., processing resource utilization, memory resource utilization, disk resource utilization etc.). According to the illustrated example, the monitoring agents 118 transmit the collected monitoring information to the example central server 106 via the example network 104. Accordingly, the central server 106 can analyze and report on the collected monitoring information.
Wherever possible, the same reference numbers will be used throughout the drawing(s) and accompanying written description to refer to the same or like parts.